Elasticsearch এ Query এবং Search দুটি গুরুত্বপূর্ণ ফিচার যা ডেটা সনাক্তকরণ ও রিট্রিভ করার জন্য ব্যবহৃত হয়। Elasticsearch একটি ডকুমেন্ট-ওরিয়েন্টেড ডিস্ট্রিবিউটেড সার্চ ইঞ্জিন, যা JSON ভিত্তিক ডকুমেন্ট স্টোর করে এবং কাস্টমাইজড এবং অত্যন্ত দ্রুত সার্চ করতে দেয়। নিচে Elasticsearch এর Query এবং Search এর বেসিক ব্যাখ্যা ও কিছু উদাহরণ দেওয়া হলো:
Elasticsearch এ Query হলো সার্চ করার জন্য ব্যবহৃত ক্রাইটেরিয়া। Query এর মাধ্যমে আপনি নির্দিষ্ট ফিল্ড, টার্ম, রেঞ্জ ইত্যাদি নির্দিষ্ট করে সার্চ করতে পারেন। Elasticsearch এ বিভিন্ন ধরনের query রয়েছে, যেমন:
উদাহরণ: একটি সাধারণ match
query
GET /my-index/_search
{
"query": {
"match": {
"field_name": "search_text"
}
}
}
উপরের query টি my-index
নামে ইনডেক্সে field_name
ফিল্ডে "search_text"
খুঁজবে।
Elasticsearch এ search API ডকুমেন্ট খুঁজে বের করার জন্য ব্যবহৃত হয়। Search API তে বিভিন্ন ধরনের query ইনপুট হিসেবে ব্যবহার করা যায়। এটি একটি RESTful API এবং HTTP GET এবং POST উভয় মাধ্যমেই ব্যবহার করা যায়।
Search এর সাধারণ উদাহরণ:
GET /my-index/_search
{
"query": {
"match_all": {}
}
}
উপরের query টি my-index
ইনডেক্সে থাকা সব ডকুমেন্ট ফিরিয়ে দেবে।
Match Query: এটি সাধারণত টেক্সট ফিল্ডে ম্যাচ করার জন্য ব্যবহৃত হয়।
{
"query": {
"match": {
"message": "Elasticsearch is awesome"
}
}
}
Term Query: এটি এক্স্যাক্ট টার্ম (নির্দিষ্ট শব্দ বা ভ্যালু) ম্যাচ করার জন্য ব্যবহৃত হয়।
{
"query": {
"term": {
"status": "published"
}
}
}
Bool Query: এটি লজিক্যাল অপারেশন (AND, OR, NOT) কম্বাইন করে ডিফল্ট ক্রাইটেরিয়া তৈরি করতে ব্যবহৃত হয়।
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Elasticsearch" }},
{ "match": { "category": "tutorial" }}
],
"filter": [
{ "range": { "date": { "gte": "2022-01-01" }}}
]
}
}
}
Range Query: এটি রেঞ্জ বা নির্দিষ্ট মানের মধ্যে থাকা ডেটা ফিল্টার করতে ব্যবহৃত হয়, যেমন তারিখ বা সংখ্যা।
{
"query": {
"range": {
"price": {
"gte": 10,
"lte": 100
}
}
}
}
Wildcard Query: এটি wildcards (*
, ?
) ব্যবহার করে প্যাটার্ন অনুযায়ী সার্চ করতে ব্যবহৃত হয়।
{
"query": {
"wildcard": {
"username": "user*"
}
}
}
Elasticsearch এ aggregation (ডেটা বিশ্লেষণ) এবং filtering (ডেটা ফিল্টার করা) খুবই গুরুত্বপূর্ণ। এটি মূলত মেট্রিক্স, হিস্টোগ্রাম, বা বিভিন্ন ধরনের চার্ট বা গ্রাফ তৈরি করতে ব্যবহার করা হয়।
Aggregation এর উদাহরণ:
{
"aggs": {
"average_price": {
"avg": {
"field": "price"
}
}
}
}
Elasticsearch এর সার্চ রেজাল্টে সাধারণত কিছু গুরুত্বপূর্ণ অংশ থাকে:
Elasticsearch এর Query এবং Search এর মাধ্যমে আপনি ডকুমেন্টগুলো খুব দ্রুত এবং এফিশিয়েন্টলি খুঁজে বের করতে পারবেন। ইনডেক্স, টার্ম, ফিল্ড, এবং রেঞ্জের মতো কনসেপ্টগুলো ভালোভাবে বোঝার মাধ্যমে আপনি খুব সহজেই আপনার সার্চ সিস্টেমকে কাস্টমাইজড করতে পারবেন।
Elasticsearch Query DSL (Domain Specific Language) হলো একটি JSON-ভিত্তিক ভাষা, যা Elasticsearch এ ডেটা অনুসন্ধান এবং ফিল্টার করার জন্য ব্যবহৃত হয়। এটি বিভিন্ন ধরনের query এবং ফিল্টার ব্যবহার করে ডকুমেন্ট অনুসন্ধান, ফিল্টারিং, এবং ডেটা বিশ্লেষণ করতে সাহায্য করে। Query DSL এর মাধ্যমে আপনি খুব সহজে কমপ্লেক্স সার্চ কন্ডিশন তৈরি করতে পারেন। নিচে এর বেসিক ধারণা ও কাঠামো নিয়ে আলোচনা করা হলো:
term
, match
, এবং range
ইত্যাদি।bool
, dis_max
, এবং constant_score
ইত্যাদি।Leaf query গুলো সরাসরি ডকুমেন্টের ফিল্ডের উপর অপারেশন করে। এগুলো সাধারণত নির্দিষ্ট একটি মান (value) এর উপর ভিত্তি করে ফিল্টার বা সার্চ করে। কিছু সাধারণ Leaf query উদাহরণ:
Match Query:
description
ফিল্ডে "full text search"
এর সাথে মিলে যায় এমন ডকুমেন্টগুলো রিটার্ন হবে।{
"query": {
"match": {
"description": "full text search"
}
}
}
Term Query:
{
"query": {
"term": {
"status": "published"
}
}
}
Range Query:
{
"query": {
"range": {
"price": {
"gte": 100,
"lte": 500
}
}
}
}
Compound query গুলো একাধিক query কে একত্রিত করে আরও জটিল কন্ডিশন তৈরি করতে ব্যবহৃত হয়। কিছু সাধারণ compound query উদাহরণ:
Bool Query:
must
অংশে দুটি match
query এবং filter
অংশে একটি range
query আছে। সবগুলো কন্ডিশন পূরণ করতে হবে ডকুমেন্ট ম্যাচ করতে।{
"query": {
"bool": {
"must": [
{ "match": { "title": "Elasticsearch" }},
{ "match": { "category": "search engine" }}
],
"filter": [
{ "range": { "date": { "gte": "2023-01-01" }}}
]
}
}
}
Dis Max Query:
{
"query": {
"dis_max": {
"queries": [
{ "match": { "title": "Elasticsearch" }},
{ "match": { "description": "full text search" }}
],
"tie_breaker": 0.3
}
}
}
Constant Score Query:
{
"query": {
"constant_score": {
"filter": {
"term": { "status": "published" }
},
"boost": 1.5
}
}
}
bool
query এর মধ্যে filter
ক্লজ হিসেবে ব্যবহৃত হয়।Elasticsearch Query DSL এর মাধ্যমে আপনি বিভিন্ন ধরনের query তৈরি করতে পারবেন যা খুবই ফ্লেক্সিবল এবং পাওয়ারফুল। Query DSL এর বেসিক ধারণা ও কাঠামো ভালোভাবে বুঝে আপনি খুব সহজেই জটিল সার্চ কন্ডিশন তৈরি করতে এবং ডেটা ফিল্টারিং ও এনালাইসিস করতে পারবেন।
Elasticsearch এ Match, Term, এবং Range Query তিনটি অত্যন্ত গুরুত্বপূর্ণ এবং সাধারণভাবে ব্যবহৃত query, যা ডকুমেন্ট অনুসন্ধান এবং ফিল্টার করার জন্য ব্যবহৃত হয়। এদের প্রত্যেকটির নিজস্ব বৈশিষ্ট্য এবং ব্যবহার রয়েছে। নিচে এদের বেসিক ধারণা এবং উদাহরণ দিয়ে ব্যাখ্যা করা হলো:
Match Query টেক্সট-ভিত্তিক ফিল্ডের মধ্যে টার্ম বা ফ্রেজ খুঁজে বের করার জন্য ব্যবহৃত হয়। এটি একটি বিশ্লেষণ প্রক্রিয়া (analyzer) ব্যবহার করে ইনডেক্স করা টেক্সটকে টোকেনাইজ করে এবং তারপর সার্চ টেক্সটের সাথে মিলানোর চেষ্টা করে।
GET /my-index/_search
{
"query": {
"match": {
"description": "Elasticsearch tutorial"
}
}
}
উপরের উদাহরণে, description
ফিল্ডে "Elasticsearch tutorial"
সম্পর্কিত টার্ম বা ফ্রেজ খুঁজে বের করবে। Elasticsearch টেক্সটটিকে টোকেনাইজ করে এবং ইনডেক্স করা ডেটার সাথে মিলিয়ে দেখে কোন ডকুমেন্টগুলো এই টার্মগুলো ধারণ করে।
Term Query নির্দিষ্ট মান বা টার্ম খুঁজে বের করার জন্য ব্যবহৃত হয় এবং এটি ইনডেক্স করা ডেটাকে বিশ্লেষণ (analyze) করে না। এটি মূলত exact match এর জন্য উপযুক্ত এবং সাধারণত কীওয়ার্ড, সংখ্যা বা নির্দিষ্ট মান (যেমন স্ট্যাটাস, আইডি) খুঁজতে ব্যবহৃত হয়।
GET /my-index/_search
{
"query": {
"term": {
"status": "published"
}
}
}
এই উদাহরণে, status
ফিল্ডে "published"
মান খুঁজে দেখা হবে। এটি সঠিকভাবে "published"
মান ধারণ করে এমন ডকুমেন্টগুলোই রিটার্ন করবে।
Range Query এমন ফিল্ডে অনুসন্ধান করে যেগুলোতে সংখ্যা, তারিখ, বা অন্যান্য পরিসীমা ভিত্তিক ডেটা রয়েছে। এটি নির্দিষ্ট মানের পরিসীমা বা রেঞ্জের মধ্যে থাকা ডকুমেন্টগুলোকে রিটার্ন করে।
gte
(greater than or equal), lte
(less than or equal), gt
(greater than), lt
(less than) ব্যবহার করা হয়।GET /my-index/_search
{
"query": {
"range": {
"price": {
"gte": 100,
"lte": 500
}
}
}
}
উপরের উদাহরণে, price
ফিল্ডের মধ্যে যেসব ডকুমেন্টের দাম ১০০ থেকে ৫০০ এর মধ্যে আছে সেগুলো রিটার্ন হবে। এখানে gte
(greater than or equal) এবং lte
(less than or equal) অপারেটর ব্যবহার করা হয়েছে।
এগুলোর সাহায্যে আপনি Elasticsearch এ বিভিন্ন ধরনের ডেটা খুব সহজেই সার্চ করতে পারেন এবং সার্চ রেজাল্টকে আরও নির্দিষ্ট করতে পারেন।
Elasticsearch-এ Bool Query একটি শক্তিশালী কনস্ট্রাক্ট যা আপনাকে একাধিক শর্ত বা কন্ডিশনের ভিত্তিতে ডকুমেন্ট অনুসন্ধান করতে দেয়। এটি মূলত একাধিক কোয়েরি (Query) কে একত্রিত করে জটিল অনুসন্ধান তৈরি করতে ব্যবহৃত হয়। Bool Query-তে চারটি মেইন ক্লজ (Clause) আছে:
এগুলো একসাথে ব্যবহার করে আপনি বিভিন্ন ধরনের জটিল কোয়েরি তৈরি করতে পারেন। নিচে প্রত্যেকটি ক্লজ-এর বিস্তারিত বর্ণনা এবং উদাহরণ দেওয়া হলো:
উদাহরণ:
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Elasticsearch" } },
{ "match": { "content": "tutorial" } }
]
}
}
}
এখানে ডকুমেন্টগুলি রিটার্ন হবে যেগুলোর title-এ "Elasticsearch" এবং content-এ "tutorial" আছে।
উদাহরণ:
{
"query": {
"bool": {
"must_not": [
{ "match": { "author": "unknown" } }
]
}
}
}
এখানে ডকুমেন্টগুলি রিটার্ন হবে যেগুলোর author ফিল্ডে "unknown" নেই।
উদাহরণ:
{
"query": {
"bool": {
"should": [
{ "match": { "tags": "Elasticsearch" } },
{ "match": { "tags": "tutorial" } }
],
"minimum_should_match": 1
}
}
}
এখানে ডকুমেন্টগুলি রিটার্ন হবে যেগুলোর tags ফিল্ডে "Elasticsearch" বা "tutorial" আছে।
উদাহরণ:
{
"query": {
"bool": {
"filter": [
{ "term": { "status": "published" } }
]
}
}
}
এখানে শুধুমাত্র সেই ডকুমেন্টগুলি রিটার্ন হবে যেগুলোর status ফিল্ডে "published" আছে।
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Elasticsearch" } }
],
"must_not": [
{ "term": { "author": "anonymous" } }
],
"should": [
{ "match": { "tags": "tutorial" } },
{ "match": { "tags": "guide" } }
],
"filter": [
{ "term": { "status": "published" } }
]
}
}
}
উপরের উদাহরণে:
Bool Query Elasticsearch-এ জটিল সার্চ অপারেশন তৈরি করতে অত্যন্ত উপযোগী। উদাহরণস্বরূপ, আপনি আপনার ডাটাবেস থেকে নির্দিষ্ট কীওয়ার্ড খুঁজে বের করতে, অবাঞ্ছিত কন্টেন্ট বাদ দিতে, অথবা ফিল্টারিং করতে Bool Query ব্যবহার করতে পারেন।
Full-text এবং Structured Search Elasticsearch-এর দুটি ভিন্ন ধরনের অনুসন্ধান পদ্ধতি, এবং এদের প্রতিটির নিজস্ব ব্যবহার ক্ষেত্র রয়েছে। চলুন, এদের সম্পর্কে বিস্তারিত আলোচনা করা যাক:
Full-text Search এমন একটি পদ্ধতি যেখানে কোন ডকুমেন্টের ভেতরের টেক্সট থেকে নির্দিষ্ট শব্দ বা কীওয়ার্ড খোঁজা হয়। এটি সাধারণত বৃহৎ পরিমাণের টেক্সট ডাটা যেমন আর্টিকেল, ব্লগ পোস্ট, প্রোডাক্ট ডেসক্রিপশন, ইত্যাদি-তে ব্যবহার করা হয়।
Elasticsearch-এর inverted index ব্যবহার করে Full-text Search পরিচালিত হয়, যা দ্রুত এবং কার্যকরীভাবে ডকুমেন্টে থাকা শব্দগুলি খুঁজে বের করতে সাহায্য করে।
উদাহরণ: যদি আপনার একটি ব্লগ ডাটাবেস থাকে এবং আপনি "Elasticsearch tutorial" কীওয়ার্ড দিয়ে সার্চ করতে চান, তাহলে Full-text Search সেই ডকুমেন্টগুলি খুঁজে বের করবে যেগুলিতে এই শব্দগুলো উপস্থিত আছে।
Full-text Search-এর ফিচার:
Full-text Search উদাহরণ:
{
"query": {
"match": {
"content": "Elasticsearch tutorial"
}
}
}
এখানে match কোয়েরি ব্যবহার করা হয়েছে যাতে content ফিল্ডে থাকা ডকুমেন্টগুলি খুঁজে বের হয় যেগুলিতে "Elasticsearch tutorial" শব্দটি উপস্থিত রয়েছে।
Structured Search এমন এক ধরনের অনুসন্ধান যেখানে আপনার ডকুমেন্টে থাকা নির্দিষ্ট ফিল্ড বা অ্যাট্রিবিউটের উপর ভিত্তি করে সার্চ করা হয়। এটি সাধারণত এমন ডাটা খোঁজার জন্য ব্যবহার করা হয় যা স্পষ্টভাবে সংজ্ঞায়িত (structured) এবং একটি নির্দিষ্ট ফিল্ডে সংরক্ষিত থাকে। উদাহরণস্বরূপ, প্রোডাক্ট আইডি, ক্যাটেগরি, ডেট টাইম, স্ট্যাটাস ইত্যাদি।
Structured Search এর কিছু সাধারণ ব্যবহার ক্ষেত্র:
Structured Search উদাহরণ:
{
"query": {
"bool": {
"filter": [
{ "term": { "status": "published" } },
{ "range": { "price": { "gte": 100, "lte": 500 } } }
]
}
}
}
উপরের উদাহরণে:
বৈশিষ্ট্য | Full-text Search | Structured Search |
---|---|---|
কোয়েরি পদ্ধতি | Inverted Index ব্যবহার করে শব্দ অনুসন্ধান | ফিল্ড-ভিত্তিক সার্চ (Term, Range, ইত্যাদি) |
ডাটা টাইপ | আনস্ট্রাকচারড বা টেক্সট ডাটা | স্ট্রাকচারড বা নির্দিষ্ট ফিল্ডভিত্তিক ডাটা |
ফিল্ড এবং রেঞ্জ সার্পোট | সাধারণত বড় টেক্সট ফিল্ডে প্রয়োগ হয় | নির্দিষ্ট ফিল্ড (সংখ্যা, ডেট, স্ট্যাটাস) |
রিলেভেন্স স্কোর | রিলেভেন্স স্কোর এবং র্যাঙ্কিং সমর্থন করে | সাধারণত রিলেভেন্স স্কোর প্রয়োজন হয় না |
Elasticsearch-এ Full-text Search এবং Structured Search একসাথে বা আলাদা ভাবে ব্যবহার করা যায়, যা আপনার ডাটার ওপর ভিত্তি করে দ্রুত এবং কার্যকর অনুসন্ধান করতে সাহায্য করে। Full-text Search সাধারণত বড় এবং আনস্ট্রাকচারড টেক্সট ডাটার জন্য ব্যবহার করা হয়, যেখানে Structured Search ব্যবহৃত হয় নির্দিষ্ট এবং স্ট্রাকচারড ফিল্ডের ওপর অনুসন্ধান করার জন্য।